package com.mazaiting.instructions.base;

import com.mazaiting.rtda.MtFrame;

/**
 * 跳转指令
 *
 * @author mazaiting
 * @since 2021/8/14
 */
public class BranchInstruction implements Instruction{
    /**
     * 跳转偏移量 2个字节
     * 有符号两个字节, 有可能为负数
     */
    protected int offset;

    @Override
    public void fetchOperands(BytecodeReader reader) {
        this.offset = reader.readU2();
    }

    @Override
    public void execute(MtFrame frame) {

    }

    /**
     * 分支跳转
     * @param frame 栈帧
     * @param offset 偏移量
     */
    protected void branch(MtFrame frame, int offset) {
        // 获取计数器
        int pc = frame.getThread().getPc();
        // 添加偏移量
        int nextPc = pc + offset;
        frame.setNextPc(nextPc);
    }
}
